package co.edu.udea.iw.rtf.dao.impl;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import co.edu.udea.iw.rtf.dao.TipoSolicitudDAO;
import co.edu.udea.iw.rtf.dto.TipoSolicitud;
import co.edu.udea.iw.rtf.exception.RTFDaoException;

public class TipoSolicitudDAOImpl extends HibernateDaoSupport implements TipoSolicitudDAO {

	/**
	 * Metodo que obtiene la lista de tipos de solicitud Activos en la base de datos
	 * Crea un ArrayList al cual asigna la lista de tipos de solicitud obtenidas con Session Hibernate y los ordena de acuerdo al nombre
	 * @return List<TipoSolicitud>
	 */
	@Override
	public List<TipoSolicitud> obtenerActivos() throws RTFDaoException {
		
		List<TipoSolicitud> tiposSolicitudes = new ArrayList<TipoSolicitud>();
		
		Session sesion = null;
		try{
			sesion = getSession();
			
			tiposSolicitudes = sesion.createCriteria(TipoSolicitud.class)
							.addOrder(Order.asc("nombre"))
							.add(Restrictions.eq("activo", true))
							.list();
			
			return tiposSolicitudes;
		}catch (HibernateException e) {
			throw new RTFDaoException(e);
		}
		
		
	}
	
	/**
	 * Metodo que obtiene los datos de un tipo de solicitud de acuerdo al codigo
	 * Crea un objeto de tipo TipoSolicitud al cual asigna los datos obtenidos en la consulta de Session Hibernate
	 * @return TipoSolicitud
	 * @param codigo
	 */
	@Override
	public TipoSolicitud obtener(Integer codigo) throws RTFDaoException {
		
		TipoSolicitud tipoSolicitud;
		Session sesion = null;
		try{
			sesion = getSession();
			
			tipoSolicitud = (TipoSolicitud)sesion.get(TipoSolicitud.class, codigo);
			
			return tipoSolicitud;
		}catch (HibernateException e) {
			throw new RTFDaoException(e);
		}
		
		
	}

}
